# RVC Controller SW — Requirements Specification

| 항목 | 내용 |
|------|------|
| 문서 번호 | RVC-REQ-002 |
| 버전 | v2.0 |
| 작성일 | 2026-05-29 |
| 작성자 | OOAD Team 9 |
| 상태 | 초안 (Draft) |

---

## 변경 이력 (Change History)

| 버전 | 날짜 | 변경 내용 | 작성자 |
|------|------|-----------|--------|
| v1.0 | 2026-05-19 | 최초 작성 — FR / NFR 도출 | OOAD Team 9 |
| v1.1 | 2026-05-19 | FR-EXT(미래 확장 요구사항) 및 범위 외 항목(Out of Scope) 섹션 삭제 | OOAD Team 9 |
| v2.0 | 2026-05-29 | HW 변경 반영 — 우측 장애물 센서 제거. 우회전 후 전방 센서를 이용한 우측 장애물 감지 방식 추가. 사용 가능 기동을 전진/좌회전/우회전/후진으로 한정하고 관련 로직 변경 | OOAD Team 9 |

---

## v1 → v2 변경 요약 (Change Summary)

본 버전은 HW 제약 변경(우측 장애물 센서 제거)을 반영한다.  
**기능의 추가·삭제 없이**, 우측 센서 없이 동일한 기능을 수행하도록 감지 방식과 방향 판단 로직을 변경한다.

| 변경 구분 | 대상 ID | 변경 내용 요약 |
|-----------|---------|---------------|
| **[삭제]** | FR-SEN-03 | 우측 장애물 감지 HW 센서 제거 |
| **[추가]** | FR-SEN-03 | 우회전 90° 후 전방 센서를 이용한 우측 장애물 감지 방식 |
| **[변경]** | FR-MOV-03 | 방향 결정 로직 — 좌측 막힘 시 우회전 후 전방 센서로 우측 확인 |
| **[변경]** | FR-MOV-05 | 전방향 막힘 확인 방법 — 우측을 우회전+전방 센서로 확인 |
| **[변경]** | FR-MOV-06 | 후진 후 고정 방향(`BACK`) 회전 삭제 → 다시 방향 판단 후 좌/우 회전 |
| **[변경]** | NFR-SAF-01 | 전방향 막힘 판단 기준에 신규 우측 감지 방식 반영 |

---

## 1. 개요 (Overview)

RVC(Robot Vacuum Cleaner)는 가정용 표면을 자동으로 청소·걸레질하는 장치이다.  
본 문서는 RVC Controller SW의 기능 요구사항(FR)과 비기능 요구사항(NFR)을 정의한다.  
HW 제어 세부 설계 및 구현은 범위에서 제외하며, **자동 청소 기능**에만 집중한다.

---

## 2. 용어 정의 (Glossary)

| 용어 | 정의 |
|------|------|
| RVC | Robot Vacuum Cleaner — 자동 청소 로봇 |
| 장애물(Obstacle) | 센서가 감지한 이동 불가 물체 |
| 먼지(Dust) | 먼지 센서가 감지한 이물질 |
| 청소 파워(Cleaning Power) | 흡입/걸레질 강도 |
| 전방/좌/우/후방 | RVC의 현재 이동 방향 기준 방위 |
| 우측 방향 확인 | **[추가]** 우측 장애물 센서 없이 우측 장애물을 감지하는 방식. RVC를 우측으로 90° 회전한 후 전방 센서를 이용하여 우측 방향의 장애물 유무를 확인함 |

---

## 3. 기능 요구사항 (Functional Requirements)

### FR 분류 체계

- **FR-MOV** : 이동(Movement) 관련
- **FR-SEN** : 센서(Sensor) 관련
- **FR-CLN** : 청소(Cleaning) 관련

> **Note:** 미래 확장 요구사항(FR-EXT)은 본 문서 범위에서 제외한다.

---

### FR-MOV : 이동 요구사항

| ID | 요구사항 | 우선순위 | 변경 구분 |
|----|----------|----------|-----------|
| FR-MOV-01 | RVC는 기본 상태에서 직진(전방)하며 청소한다. | Must | — |
| FR-MOV-02 | 전방에 장애물이 감지되면 이동을 즉시 정지한다. | Must | — |
| FR-MOV-03 | 전방 장애물 감지 후, 좌측 센서를 확인하여 좌측이 비어 있으면 좌회전하고, 좌측이 막혀 있으면 우회전 후 전방 센서로 우측 장애물 유무를 확인하여 방향을 결정한다. | Must | **[변경]** |
| FR-MOV-04 | 방향 전환 완료 후 전진을 재개하며 청소를 계속한다. | Must | — |
| FR-MOV-05 | 전방·좌측·우측(우회전 후 전방 센서로 확인) 모두에 장애물이 감지되면 후방으로 이동한다. | Must | **[변경]** |
| FR-MOV-06 | 후진 완료 후 다시 좌측 및 우측 방향을 판단하여 좌측 또는 우측으로 회전(방향 전환)한다. | Must | **[변경]** |
| FR-MOV-07 | 방향 전환 완료 후 전진을 재개하며 청소를 계속한다. | Must | — |

#### FR-MOV-03 변경 상세

> **v1 (기존):** 전방 장애물 감지 후, 좌측 또는 우측으로 회전(방향 전환)한다.  
> → 좌측 센서와 우측 센서로 각 방향을 직접 확인하여 방향을 결정하였음.
>
> **v2 [변경]:** 우측 장애물 센서가 없으므로 아래 순서로 방향을 결정한다.
> 1. 좌측 센서 확인: 좌측이 비어 있으면 좌회전 후 전진 재개 (v1 동작 유지)
> 2. 좌측이 막혀 있으면: 우측으로 90° 회전 후 전방 센서로 우측 방향 장애물 유무 확인
>    - 우측이 비어 있으면: 우회전 완료 후 전진 재개 (우회전 기동 유지)
>    - 우측도 막혀 있으면: FR-MOV-05 조건으로 진입

#### FR-MOV-05 변경 상세

> **v1 (기존):** 전방·좌측·**우측** 모두 장애물이 감지되면 후방으로 이동한다.  
> → 우측 센서로 우측 장애물을 직접 감지하여 전방향 막힘을 판단하였음.
>
> **v2 [변경]:** 우측 장애물 감지를 우회전 후 전방 센서로 수행한다.  
> 전방·좌측이 막혀 있고, 우회전 후 전방 센서가 우측도 막혀 있음을 확인하면 후방으로 이동한다.  
> **후방 이동 자체는 v1과 동일하게 유지된다.**

#### FR-MOV-06 변경 상세

> **v1 (기존):** 후진 완료 후 좌측 또는 우측으로 회전(방향 전환)한다.  
> → 후진 후 고정된 방향(BACK, 즉 현재 기준 후방 방향으로 180° 회전)으로 전환하였음.
>
> **v2 [변경]:** 고정 후방 방향(BACK) 회전을 삭제한다.  
> 후진 완료 후 FR-MOV-03의 방향 판단 로직(좌측 센서 확인 → 좌측 막힘 시 우회전 후 전방 센서 확인)을 동일하게 적용하여 좌측 또는 우측으로 회전한다.

---

### FR-SEN : 센서 요구사항

| ID | 요구사항 | 우선순위 | 변경 구분 |
|----|----------|----------|-----------|
| FR-SEN-01 | RVC는 전방 장애물을 감지하는 센서를 사용한다. | Must | — |
| FR-SEN-02 | RVC는 좌측 장애물을 감지하는 센서를 사용한다. | Must | — |
| ~~FR-SEN-03~~ | ~~RVC는 우측 장애물을 감지하는 센서를 사용한다.~~ | ~~Must~~ | **[삭제]** |
| FR-SEN-03 | RVC는 우측으로 90° 회전한 후 전방 센서를 이용하여 우측 방향의 장애물을 감지한다. | Must | **[추가]** |
| FR-SEN-04 | RVC는 먼지를 감지하는 센서를 사용한다. | Must | — |
| FR-SEN-05 | 센서 데이터는 실시간으로 Controller에 전달되어야 한다. | Must | — |
| FR-SEN-06 | 시스템은 센서 추가 또는 교체에 대응할 수 있도록 설계되어야 한다. | Should | — |

> **[삭제] 구 FR-SEN-03:** 우측 장애물 감지 센서는 HW에서 제거되었다.  
>
> **[추가] 신 FR-SEN-03:** 우측 방향 감지는 물리적 센서 대신 기동을 이용한다.  
> RVC를 우측으로 90° 회전시킨 후, 기존의 전방 센서를 이용해 해당 방향의 장애물 유무를 확인한다.  
> 이를 통해 HW 센서 추가 없이 우측 방향 감지 기능을 유지한다.

---

### FR-CLN : 청소 요구사항

| ID | 요구사항 | 우선순위 | 변경 구분 |
|----|----------|----------|-----------|
| FR-CLN-01 | RVC는 이동 중 지속적으로 청소(흡입·걸레질)를 수행한다. | Must | — |
| FR-CLN-02 | 먼지가 감지되면 일정 시간 동안 청소 파워를 증가시킨다. | Must | — |
| FR-CLN-03 | 청소 파워 증가 시간이 경과하면 기본 청소 파워로 복귀한다. | Must | — |
| FR-CLN-04 | 장애물로 인해 정지 중에도 청소는 중단되지 않는다. (정지는 이동만 정지) | Should | — |

---

## 4. 비기능 요구사항 (Non-Functional Requirements)

### NFR 분류 체계

- **NFR-PER** : 성능(Performance)
- **NFR-REL** : 신뢰성(Reliability)
- **NFR-MNT** : 유지보수성(Maintainability)
- **NFR-EXT** : 확장성(Extensibility)
- **NFR-SAF** : 안전성(Safety)
- **NFR-PRT** : 이식성(Portability)

---

### NFR-PER : 성능

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-PER-01 | 센서 입력 감지 후 제어 명령 출력까지의 응답 시간은 100ms 이하이어야 한다. | 응답 시간 ≤ 100ms | — |
| NFR-PER-02 | 먼지 감지 후 청소 파워 변경은 즉각적(≤ 50ms)이어야 한다. | 파워 변경 시간 ≤ 50ms | — |
| NFR-PER-03 | Controller는 초당 최소 10회 이상 센서 상태를 폴링(polling)할 수 있어야 한다. | 폴링 주기 ≤ 100ms | — |

---

### NFR-REL : 신뢰성

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-REL-01 | 센서 오류 발생 시 RVC는 안전한 상태(정지)로 전환되어야 한다. | 센서 오류 → 정지 전환 | — |
| NFR-REL-02 | SW 오류로 인한 비정상 종료 없이 연속 8시간 이상 운영 가능해야 한다. | MTBF ≥ 8시간 | — |
| NFR-REL-03 | 장애물 감지 실패율은 1% 미만이어야 한다. | 오감지율 < 1% | — |

---

### NFR-MNT : 유지보수성

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-MNT-01 | 각 기능 모듈은 독립적으로 수정·교체 가능한 구조로 설계되어야 한다. | 모듈 결합도 Low | — |
| NFR-MNT-02 | 코드 변경 없이 설정 값(파워 증가 시간, 회전 각도 등)을 수정할 수 있어야 한다. | 설정 파일 분리 | — |
| NFR-MNT-03 | 시스템은 동작 이벤트 로그를 기록하여 디버깅에 활용할 수 있어야 한다. | 로그 수준 지원 | — |

---

### NFR-EXT : 확장성

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-EXT-01 | 새로운 센서 유형을 추가할 때 기존 코드 수정을 최소화해야 한다. (OCP 준수) | 기존 모듈 수정 없음 | — |
| NFR-EXT-02 | 모바일 앱 통신 모듈을 추가할 때 핵심 로직 변경이 없어야 한다. | 인터페이스 분리 | — |
| NFR-EXT-03 | ML 추론 모듈을 플러그인 형태로 통합할 수 있어야 한다. | 의존성 역전 적용 | — |

---

### NFR-SAF : 안전성

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-SAF-01 | 전방·좌측·우측(우회전 후 전방 센서로 확인) 모두에 장애물이 감지되는 경우 RVC는 후방으로 이동하여 탈출을 시도해야 한다. | 후방 이동 동작 확인 | **[변경]** |
| NFR-SAF-02 | 비정상 센서값(범위 초과 등)은 무시하고 이전 유효 상태를 유지해야 한다. | 입력 유효성 검사 | — |

> **[변경] NFR-SAF-01:**  
> - **v1 (기존):** "모든 방향(전방·좌·우)에 장애물이 있는 경우"  
>   → 우측 센서로 우측 장애물을 직접 확인하였음.  
> - **v2 [변경]:** 우측 장애물은 우회전 후 전방 센서로 확인한다.  
>   → 전방 막힘, 좌측 막힘, 우회전 후 전방 센서가 우측도 막힘을 확인한 경우 후방 이동을 수행한다.  
>   → **후방 이동 후 재방향 판단을 통해 탈출하는 전체 흐름은 v1과 동일하게 유지된다.**

---

### NFR-PRT : 이식성

| ID | 요구사항 | 측정 기준 | 변경 구분 |
|----|----------|-----------|-----------|
| NFR-PRT-01 | Controller SW의 핵심 로직은 특정 HW 플랫폼에 종속되지 않아야 한다. | HW 추상화 레이어 분리 | — |
| NFR-PRT-02 | HW 제어 인터페이스는 추상화된 API를 통해서만 접근해야 한다. | 직접 HW 접근 금지 | — |

---

## 5. 요구사항 추적 매트릭스 (Requirements Traceability)

| FR ID | 관련 NFR | 비고 | 변경 구분 |
|-------|----------|------|-----------|
| FR-SEN-01, FR-SEN-02 | NFR-PER-01, NFR-REL-01, NFR-REL-03 | 전방·좌측 센서 처리 | — |
| ~~FR-SEN-03 (구)~~ | ~~NFR-PER-01, NFR-REL-03~~ | ~~우측 HW 센서~~ | **[삭제]** |
| FR-SEN-03 (신) | NFR-PER-01, NFR-REL-03 | 우회전 후 전방 센서로 우측 감지 | **[추가]** |
| FR-SEN-06 | NFR-EXT-01 | 센서 확장성 | — |
| FR-MOV-01, 02, 04, 07 | NFR-PER-01 | 기본 이동 제어 응답성 | — |
| FR-MOV-03 | NFR-PER-01, NFR-SAF-01 | 우측 감지 포함 방향 결정 로직 | **[변경]** |
| FR-MOV-05, 06 | NFR-SAF-01 | 전방향 막힘 후 후방 이동·재판단 | **[변경]** |
| FR-CLN-01 ~ 04 | NFR-PER-02 | 청소 파워 제어 | — |